// vite-plugin-asset-naming.ts
import { PluginOption } from 'vite';

interface AssetNamingOptions {
  // 可以扩展的选项
  prefix?: string;
}

// 视频文件扩展名
const videoExt = ['.mp4', '.avi', '.wmv', '.ram', '.mpg', '.mpeg', '.m3u8'];
// 音频文件扩展名
const audioExt = ['.mp3', '.flac', '.wav', '.aac', '.ape', '.m4a'];
// 图片文件扩展名
const imgExt = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg'];
// 字体文件扩展名
const fontExt = ['.ttf', '.otf', '.woff', '.woff2', '.eot'];

export function assetNameBuildPlugin(
  options: AssetNamingOptions = {}
): PluginOption {
  return {
    name: 'vite-plugin-asset-naming',
    config() {
      return {
        build: {
          rollupOptions: {
            output: {
              assetFileNames: (assetInfo) => {
                const ext = assetInfo.name?.split('.').pop() || '';
                const baseName = assetInfo.name?.split('.').shift() || '';

                // CSS 文件处理
                if (ext === 'css') {
                  return 'css/[name]-[hash].[ext]';
                }

                // 字体文件处理
                if (fontExt.includes(`.${ext}`.toLowerCase())) {
                  return `assets/font/${baseName}-[hash].[ext]`;
                }

                // 图片文件处理
                if (imgExt.includes(`.${ext}`.toLowerCase())) {
                  return `assets/images/${baseName}-[hash].[ext]`;
                }

                // 视频文件处理
                if (videoExt.includes(`.${ext}`.toLowerCase())) {
                  return `assets/video/${baseName}-[hash].[ext]`;
                }

                // 音频文件处理
                if (audioExt.includes(`.${ext}`.toLowerCase())) {
                  return `assets/audio/${baseName}-[hash].[ext]`;
                }

                // 其他未分类资源
                return 'assets/other/[name]-[hash].[ext]';
              },
              chunkFileNames: 'js/[name]-[hash].js',
              entryFileNames: 'js/[name]-[hash].js',
            },
          },
        },
      };
    },
  };
}
